package com.henry.imkit.request

import com.henry.imkit.models.*
import io.reactivex.Observable
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.*

interface IMApiService {

    @POST
    fun postBody(@Url url: String, @Body requestBody: RequestBody): Observable<String>

    /**
     * sessionId
     */
    @GET("/v2/im/sessionid")
    fun imSessionId(): Observable<SessionRepo>

    /**
     * 连接websocket前请求
     */
    @GET("/v2/im/websocket/info")
    fun websocket(): Observable<String>

    /**
     * 用户信息
     */
    @GET("/v2/user/info")
    fun userInfo(@Query("userid") userid: String): Observable<UserRepo>

    /**
     * 会话列表
     */
    @POST("/v2/api/group/list")
    fun getConversations(@Body body: ConversationBody): Observable<ConversationRepo>

    /**
     * 会话信息
     */
    @POST("/v2/api/group/getGroupInfoWithOwner")
    fun getConversationInfo(@Body body: ConversationInfoBody): Observable<ConversationInfoRepo>

    /**
     * 创建会话
     */
    @POST("/v2/api/group/create")
    fun createConversation(@Body body: CreateConversationBody): Observable<CreateConversationRepo>

    /**
     * 更新会话
     */
    @POST("/v2/api/group/update")
    fun updateConversation(@Body body: UpdateConversationBody): Observable<BaseRepo>

    /**
     * 添加成员
     */
    @POST("/v2/api/group/addmembers")
    fun addMembers(@Body body: AddMembersBody): Observable<BaseRepo>

    /**
     * 删除成员
     */
    @POST("/v2/api/group/deletemembers")
    fun deleteMembers(@Body body: AddMembersBody): Observable<BaseRepo>

    /**
     * 平台下用户列表
     */
    @GET("/v2/user/findUserListForMobile")
    fun getUserList(@Query("dtid") dtid: String, @Query("keyword") keyword: String, @Query("page") page: Int, @Query("size") size: Int): Observable<UserListRepo>

    /**
     * 聊天历史记录
     */
    @GET("/v2/im/to/{dgid}/messages")
    fun messages(@Path("dgid") dgid: String, @Query("time") time: String, @Query("size") size: Int): Observable<MessagesRepo>


    /**
     * 上传多个文件
     */
    @Multipart
    @POST("/v2/upload/uploadMultipartFile/{type}/{dgid}")
    fun uploadMultipartFile(@Path("type") type: String, @Path("dgid") dgid: String, @Part parts: List<MultipartBody.Part>): Observable<MultipartFileRepo>

    /**
     * 上传单个文件
     */
    @Multipart
    @POST("/v2/upload/uploadSingleFile/{type}/{dgid}")
    fun uploadSingleFile(@Path("type") type: String, @Path("dgid") dgid: String, @Part file: MultipartBody.Part): Observable<SingleFileRepo>

    @GET("/v2/rtc/domain")
    fun getRTCDomain(): Observable<RTCDomainRepo>

}